/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controlador;

import clases.Usuario;
import Util.UtilFecha;
import clases.Invitacion;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import persistencia.PersistenciaAmigos;
import persistencia.PersistenciaInvitaciones;

/**
 *
 * @author JAVA
 */
public class pruebaAlta extends HttpServlet {

    String errorForm = "";

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        HttpSession sesion = request.getSession();
        Usuario usuario = (Usuario) sesion.getAttribute("usuario");
        sesion.setAttribute("erroresForm", "");
        sesion.setAttribute("tipoError", "");
        String nick;
        try {
            String nuevo = (String) request.getSession().getAttribute("alta");
            Usuario usu = null;
            //Recuperamos valores de formulario
            if (nuevo.compareTo("si") == 0) {
                nick = request.getParameter("alias");
            } else {
                nick = usuario.getUsuario();
            }
            String nombre = request.getParameter("nom");
            String apellidos = request.getParameter("apel");
            String email = request.getParameter("email");
            String poblacion = request.getParameter("pob");
            String provincia = request.getParameter("prov");
            String descripcion = request.getParameter("desc");
            String pass = request.getParameter("pass");
            String perfil = "";
            String sexo = request.getParameter("sexos");
            String fecha = request.getParameter("fechaNac");
            String lema = request.getParameter("lema");
            //comprobacion de campos nulos
            if (EsVacioString(nombre, "nombre") || EsVacioString(apellidos, "apellidos") || EsVacioString(nick, "nick") || EsVacioString(lema, "lema") || EsEmail(email)
                    || EsVacioString(poblacion, "poblacion") || EsVacioString(provincia, "provincia") || EsVacioString(descripcion, "descripcion") || EsVacioString(pass, "pass")
                    || EsFecha(fecha)) {
                sesion.setAttribute("erroresForm", "\nRELLENE CORRECTAMENTE LOS CAMPOS");
                sesion.setAttribute("tipoError", errorForm);
                usu = new Usuario(nombre, apellidos, nick, email, poblacion, provincia, descripcion, pass, perfil, sexo, new Date(0), lema);
                //le pasamos los valores introducidos en el usuario para que esten cargados en el formulario
                sesion.setAttribute("usuario", usu);
                response.sendRedirect("registro.jsp");
            } else {
                sesion.setAttribute("errForm", null);
                Date fechaNac = UtilFecha.obtenerFecha(fecha);
                usu = new Usuario(nombre, apellidos, nick, email, poblacion, provincia, descripcion, pass, perfil, sexo, fechaNac, lema);
                if (nuevo.compareTo("si") == 0) {//si el usuario es nuevo
                    if (Usuario.compruebaUsuario(nick)) {
                        sesion.setAttribute("tipoError", "nick");
                    } else {
                        if(Invitacion.existeInvitacion(email))//comprobamos la invitacion
                        {
                            Invitacion.aceptarInvitacion(nick, email);//actualizamos en BBDD
                        }
                        Usuario.AltaUsuario(usu);
                        sesion.removeAttribute("usuario");
                    }
                    response.sendRedirect("index.jsp");
                } else {//si es usuario existente
                    Usuario.ActualizaUsuario(usu);
                    sesion.setAttribute("usuario", usu);
                    response.sendRedirect("registro.jsp");
                }

            }
            out.println("<html>");
            out.println("<head>");
            out.println("</head>");
            out.println("<body>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();

        }


    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    public boolean EsVacioString(String aux, String campo) {
        if (aux.compareTo("") == 0) {
            errorForm = campo;
            return true;
        } else {
            return false;
        }
    }

    public boolean EsEmail(String email) {
        if (email.contains("@")) {
            return false;
        } else {
            errorForm = "email";
            return true;
        }
    }

    //comprueba si la fecha introducido por teclado es correcta
    public boolean EsFecha(String fechaEntrada) {
        boolean dev = false;
        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        Date fecha = new Date();

        Date fechaFormateada = null;
        try {
            fecha = df.parse(fechaEntrada);
            long longFecha = fecha.getTime();
            fechaFormateada = new Date(longFecha);
        } catch (Exception e) {
            dev = true;
            errorForm = "fecha";
        }
        return dev;
    }
}
